iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0
AI & Data

從0開始的MLFLOW應用搭建系列 第 22

Day 22 – 建立推薦 API /recommend

  • 分享至 

  • xImage
  •  

🎯 今日目標

今天我們要讓 FastAPI 真的能提供推薦結果。
這意味著:

  1. MLflow Model Registry(Staging) 載入模型。
  2. 建立 /recommend API,接受動畫名稱列表,回傳推薦清單。

🧩 背景

前一天 (Day 21),我們建立了 FastAPI 基礎結構與 /health API。
但那時只是確認 FastAPI 是否啟動成功。

👉 今天,我們讓 FastAPI 變成推薦服務層
它會呼叫 MLflow Model Registry 裡的 Staging 模型
並回傳即時推薦結果。

🧩 1. 增修 FastAPI 主程式:src/api/main.py

import mlflow
import mlflow.pyfunc
from fastapi import FastAPI
from pydantic import BaseModel
import pandas as pd
import os

app = FastAPI(
    title="Anime Recommender API",
    description="FastAPI + MLflow 企業級推薦系統",
    version="2.0.0"
)

# === Health Check ===
@app.get("/health")
def health_check():
    return {"status": "ok", "message": "FastAPI is running 🚀"}

class RecommendRequest(BaseModel):
    anime_titles: list[str]

# === 載入模型 ===
mlflow.set_tracking_uri("http://mlflow:5000")
MODEL_URI = "models:/AnimeRecsysModel/Staging"
print(f"📦 Loading model from {MODEL_URI} ...")
model = mlflow.pyfunc.load_model(MODEL_URI)
print("✅ Model loaded successfully!")

# === 推薦 API ===
@app.post("/recommend")
def recommend(request: RecommendRequest):
    try:
        df_input = pd.DataFrame(request.anime_titles)
        result = model.predict(df_input)
        return {
            "input": request.anime_titles,
            "recommendations": result[0]
        }
    except Exception as e:
        return {"error": str(e)}

▶️ 2. 啟動 FastAPI

在專案根目錄執行:

docker compose up -d fastapi

FastAPI 啟動後會自動載入 Staging 模型:

📦 Loading model from models:/AnimeRecsysModel/Staging ...
✅ Model loaded successfully!

https://ithelp.ithome.com.tw/upload/images/20251006/20178626zYXRaGvsp7.png


🧪 3. 測試 API

python-dev 容器使用 curl 測試

curl -X POST http://fastapi:8000/recommend \
  -H "Content-Type: application/json" \
  -d '{"anime_titles": ["Naruto", "Bleach"]}'

https://ithelp.ithome.com.tw/upload/images/20251006/20178626Hmkfo8VJAB.png


🧭 架構關聯圖

Client (curl / Streamlit)
        │
        ▼
 FastAPI 8000  (我們剛才執行了 models:/AnimeRecsysModel/Staging)
        │
        ▼
 MLflow Server 5000  (Registry + Artifacts)
        │
        ▼
 Model Files (PopularTop10)

✅ 重點總結

  • 我們建立了第一個真正「可對外提供推薦」的 API。
  • FastAPI 能從 MLflow Model Registry 自動載入模型。
  • 輸入動畫名稱列表,輸出推薦清單。

💡 延伸思考

  • 之後可以在 /recommend 加入:

    • 模型版本資訊(回傳使用的模型 ID、Stage、timestamp)。
    • Cache 機制,避免每次重載模型。
    • Logging:紀錄每次 API request,供後續 AB 測試分析。

上一篇
Day 21 – FastAPI 安裝與架構概覽
下一篇
Day 23 – 建立記錄 API /log-ab-event
系列文
從0開始的MLFLOW應用搭建23
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言